home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / overscn3.arc / SAMPLE.C < prev   
C/C++ Source or Header  |  1989-07-07  |  3KB  |  89 lines

  1. /**********************************************************************
  2.  * BeispielProgramm das zeigt, wie man sich unter dem OVERSCAN-Modus
  3.  * eine 2.BildschirmSeite anlegen kann.
  4.  *
  5.  * Karsten Isakovic    05.07.89
  6.  */
  7.  
  8. #include <osbind.h>
  9.  
  10. long OldPhys,NewPhys;
  11. long OldLog ,NewLog ;
  12.  
  13. long Offset;
  14.  
  15. #define V_REZ_HZ        -0xc    
  16. #define V_REZ_VT        -4    
  17. #define BYTES_LIN       -2    
  18.  
  19. main()
  20. {
  21. int  BpL,MaxX,MaxY;
  22. long block,*b,len;
  23.  
  24.  asm    {
  25.         dc.w    0xa000                  ; LineA-Init
  26.         move.w  BYTES_LIN(A0),BpL(A6)   ; Bytes pro Zeile
  27.         move.w  V_REZ_VT(A0),MaxY(A6)   ; Breite in Pixel
  28.         move.w  V_REZ_HZ(A0),MaxX(A6)   ; Höhe in Pixel
  29.         }
  30.  
  31.   OldPhys= Physbase();                   /* Alten Werte holen         */
  32.   OldLog = Logbase();
  33.   Offset = OldLog-OldPhys;               /* Offset bestimmen          */
  34.  
  35. /* Wenn der PhysbaseEmulator an ist bekommt man bei Physbase den Wert */
  36. /* von Logbase zurückgeliefert, kann also den notwendigen Offset nicht*/
  37. /* bestimmen !                                                        */
  38.    
  39.   len  = (long)BpL * (long)MaxY + 5000L; /* Breite*Höhe + ExtraRänder */
  40.  
  41.   block = Malloc(-1L);                   /* SpeicherPlatz testen      */
  42.   if (block < len)
  43.     {
  44.     Cconws("\n\rNicht genug Speicher.\n\r");
  45.     Cconws("   Return drücken..\n\r");
  46.     Cnecin();
  47.     exit(-1);
  48.     }
  49.   else
  50.     Cconws("\r\n\n    MiniDemo für 2. Bildschirm\n\r");
  51.  
  52.   block  = Malloc(len);                 /* SpeicherPlatz anlegen        */  
  53.  
  54.   b   = (long *)(block);                /* Speicher auf Schwarz löschen */
  55.   while((long)b < block+len)            /* Ist wegen dem RücklaufStrahl */
  56.       *b++ = -1L;                       /* notwendig                    */
  57.  
  58.   NewPhys = (block+2000L)&0xffff00L;    /* Physbase berechnen           */ 
  59.   NewLog  = NewPhys + Offset;           /* Logbase  berechnen           */
  60.  
  61.   demo();
  62.   
  63.   Mfree(block);                         /* Speicher wieder freigeben    */
  64. }
  65.  
  66. demo()  
  67. {
  68.   Cconws("\n\r Mit den Shift Tasten kann zwischen");
  69.   Cconws("\n\r den beiden Bildschirmen umgeschaltet");
  70.   Cconws("\n\r werden.\r\n\n  Ende durch Tastendruck.");
  71.  
  72.   Setscreen(NewLog,-1L,-1);           /* 2. Bildschirm auf weiß löschen    */
  73.   Bconout(2,27);
  74.   Bconout(2,'E');                     
  75.   Cconws("\n\r Dies ist der 2. Bildschirm\n\r");
  76.   Cconws("\n\r   Ich hab ja gesagt, daß es nur");
  77.   Cconws("\n\r   eine MiniDemo ist.");
  78.  
  79.   while( !Cconis() )                  /* Solange keine Taste gedrückt      */
  80.     if ( Kbshift(-1) )                /*   Je nach Status der Sondertasten */
  81.       Setscreen(NewLog,NewPhys,-1);   /*   Shift/Control/Alt Schirm 1 oder */
  82.     else                              /*   Schirm 2 anzeigen               */
  83.       Setscreen(OldLog,OldPhys,-1);      
  84.  
  85.   Cnecin();                           /* Tastendruck löschen   */
  86.   Setscreen(OldLog,OldPhys,-1);       /* Wieder zurückschalten */
  87. }
  88.  
  89.